import { Injectable } from "@nestjs/common";
import { InjectDataSource } from "@nestjs/typeorm";
import { DataSource } from "typeorm";

@Injectable()
export class DatabaseSyncService {
  constructor(
    @InjectDataSource()
    private dataSource: DataSource
  ) {}

  /**
   * 同步数据库结构
   */
  async syncDatabase() {
    try {
      console.log("🔧 开始同步数据库结构...");

      // 首先设置MySQL会话配置
      await this.setupMySQLSession();

      // 执行数据库同步
      await this.dataSource.synchronize();

      console.log("✅ 数据库结构同步完成");
    } catch (error) {
      console.error("❌ 数据库同步失败:", error);
      throw error;
    }
  }

  /**
   * 设置MySQL会话配置
   */
  private async setupMySQLSession() {
    try {
      console.log("🔧 设置MySQL会话配置...");

      // 设置会话级别的sql_mode为兼容模式
      await this.dataSource.query("SET SESSION sql_mode = ''");
      console.log("✅ 已设置会话sql_mode为空（兼容模式）");

      // 设置时区
      await this.dataSource.query("SET SESSION time_zone = '+08:00'");
      console.log("✅ 已设置时区为+08:00");

      // 禁用外键检查
      await this.dataSource.query("SET SESSION FOREIGN_KEY_CHECKS=0");
      console.log("✅ 已禁用外键检查");

      // 设置字符集
      await this.dataSource.query(
        "SET SESSION character_set_connection = 'utf8mb4'"
      );
      await this.dataSource.query(
        "SET SESSION character_set_client = 'utf8mb4'"
      );
      await this.dataSource.query(
        "SET SESSION character_set_results = 'utf8mb4'"
      );
      console.log("✅ 已设置字符集为utf8mb4");

      console.log("✅ MySQL会话配置设置完成");
    } catch (error) {
      console.error("❌ 设置MySQL会话配置失败:", error);
      throw error;
    }
  }
}
